package chapter03;

/**
 * 双指针
 * 判断回文 str
 * 1.初始化 left=0，right=length-1
 * 2.如果当前字符不是字母和数字，直接跳过
 * 3.如果当前字符满足条件
 *      1）.两者可能直接相等
 *      2）.两者不相等
 *          a).大小写不确定，将是大写字母的字符转为小写字母再判断
 *          b).其他条件为非回文
 *
 */
public class IsPalindrome125 {
    public boolean isPalindrome(String s) {
        char[] str=s.toCharArray();
        int l=0,r=str.length-1;
        int lc,rc;
        while (l<r){
            lc=0;
            rc=1;
            if (!(str[l]>='0'&&str[l]<='9'||str[l]>='a'&&str[l]<='z'||str[l]>='A'&&str[l]<='Z')){
                l++;
                continue;
            }
            if (!(str[r]>='0'&&str[r]<='9'||str[r]>='a'&&str[r]<='z'||str[r]>='A'&&str[r]<='Z')){
                r--;
                continue;
            }
            if (str[l]>='A'&&str[l]<='Z'){
                lc=(str[l]-'A'+'a');
            }
            if (str[r]>='A'&&str[r]<='Z'){
                rc=(str[r]-'A'+'a');
            }
            if (str[l]==str[r]||lc==str[r]||str[l]==rc||lc==rc){
                l++;
                r--;
                continue;
            }
            return false;
        }
        return true;
    }
}
